key metrics

TOTAL_READS FREEMIX (contamination)
MEAN_COVERAGE MEAN_INSERT_SIZE
TOTAL_SNPS TOTAL_INDELS

main diff metrics

  • All reads and depth related metrics:
    • lower in salive, due to fewer reads
  • MODE_INSERT_SIZE
    • The MODE insert size of all paired end reads where both ends mapped to the same chromosome
    • lower in salive; something wrong with the insert size distribution
  • PCT_EXC_MAPQ
    • The fraction of aligned bases that were filtered out because they were in reads with low mapping quality
    • higher in salive; mapping quality is genernally worse
  • NOVEL_TITV
    • The Transition/Transversion ratio of the passing bi-allelic SNP calls made at non-dbSNP sites
    • higher FP for novel variant, need a more stringent tranche sensitivity value. DBSNP_TITV looks ok
MODE_INSERT_SIZE PCT_EXC_MAPQ NOVEL_TITV

BAM in IGV

other metrics

AVG_DP

Average sequencing depth at the sites in the VCF file AVG_DP

DBSNP_INS_DEL_RATIO

The Insertion/Deletion ratio of the indel calls made at dbSNP sites DBSNP_INS_DEL_RATIO

DBSNP_TITV

The Transition/Transversion ratio of the passing bi-allelic SNP calls made at dbSNP sites DBSNP_TITV

FREELK0

Log-likelihood of the sequence reads given no contamination under sequence-only method FREELK0

FREELK1

Maximum log-likelihood of the sequence reads given estimated contamination under sequence-only method FREELK1

HET_HOMVAR_RATIO

(count of hets)/(count of homozygous non-ref) for this sample HET_HOMVAR_RATIO

HET_SNP_Q

The Phred Scaled Q Score of the theoretical HET SNP sensitivity. HET_SNP_Q

HET_SNP_SENSITIVITY

The theoretical HET SNP sensitivity. HET_SNP_SENSITIVITY

MAD_COVERAGE

The median absolute deviation of coverage of the genome after all filters are applied. MAD_COVERAGE

MAX_INSERT_SIZE

The maximum measure insert size by alignment. This is usually very high representing either an artifact or possibly the presence of a structural re-arrangement. MAX_INSERT_SIZE

MEAN_READ_LENGTH

The mean read length of the set of reads examined. When looking at the data for a single lane with equal length reads this number is just the read length. When looking at data for merged lanes with differing read lengths this is the mean read length of all reads. MEAN_READ_LENGTH

MEDIAN_ABSOLUTE_DEVIATION

The median absolute deviation of the distribution. If the distribution is essentially normal then the standard deviation can be estimated as ~1.4826 * MAD. MEDIAN_ABSOLUTE_DEVIATION

MEDIAN_COVERAGE

The median coverage in bases of the genome territory, after all filters are applied. MEDIAN_COVERAGE

MEDIAN_INSERT_SIZE

The MEDIAN insert size of all paired end reads where both ends mapped to the same chromosome. MEDIAN_INSERT_SIZE

MIN_INSERT_SIZE

The minimum measured insert size. This is usually 1 and not very useful as it is likely artifactual. MIN_INSERT_SIZE

NOVEL_INDELS

The number of passing indels called that were not found in dbSNP NOVEL_INDELS

NOVEL_INS_DEL_RATIO

The Insertion/Deletion ratio of the indel calls made at non-dbSNP sites NOVEL_INS_DEL_RATIO

NOVEL_SNPS

The number of passing bi-allelic SNPS called that were not found in dbSNP NOVEL_SNPS

NUM_IN_DB_SNP

The number of passing bi-allelic SNPs found in dbSNP NUM_IN_DB_SNP

NUM_IN_DB_SNP_COMPLEX_INDELS

The number of passing complex indels found in dbSNP NUM_IN_DB_SNP_COMPLEX_INDELS

NUM_IN_DB_SNP_INDELS

The number of passing indels found in dbSNP NUM_IN_DB_SNP_INDELS

NUM_IN_DB_SNP_MULTIALLELIC

The number of passing multi-allelic SNPs found in dbSNP NUM_IN_DB_SNP_MULTIALLELIC

NUM_SINGLETONS

For summary metrics, the number of variants that appear in only one sample. NUM_SINGLETONS

PCT_100X

The fraction of bases that attained at least 100X sequence coverage in post-filtering bases. PCT_100X

PCT_10X

The fraction of bases that attained at least 10X sequence coverage in post-filtering bases. PCT_10X

PCT_15X

The fraction of bases that attained at least 15X sequence coverage in post-filtering bases. PCT_15X

PCT_1X

The fraction of bases that attained at least 1X sequence coverage in post-filtering bases. PCT_1X

PCT_20X

The fraction of bases that attained at least 20X sequence coverage in post-filtering bases. PCT_20X

PCT_25X

The fraction of bases that attained at least 25X sequence coverage in post-filtering bases. PCT_25X

PCT_30X

The fraction of bases that attained at least 30X sequence coverage in post-filtering bases. PCT_30X

PCT_40X

The fraction of bases that attained at least 40X sequence coverage in post-filtering bases. PCT_40X

PCT_50X

The fraction of bases that attained at least 50X sequence coverage in post-filtering bases. PCT_50X

PCT_5X

The fraction of bases that attained at least 5X sequence coverage in post-filtering bases. PCT_5X

PCT_60X

The fraction of bases that attained at least 60X sequence coverage in post-filtering bases. PCT_60X

PCT_70X

The fraction of bases that attained at least 70X sequence coverage in post-filtering bases. PCT_70X

PCT_80X

The fraction of bases that attained at least 80X sequence coverage in post-filtering bases. PCT_80X

PCT_90X

The fraction of bases that attained at least 90X sequence coverage in post-filtering bases. PCT_90X

PCT_ADAPTER

The fraction of PF reads that are unaligned and match to a known adapter sequence PCT_ADAPTER

PCT_CHIMERAS

The fraction of reads that map outside of a maximum insert size (usually 100kb) or that have the two ends mapping to different chromosomes. PCT_CHIMERAS

PCT_DBSNP

The fraction of passing bi-allelic SNPs in dbSNP PCT_DBSNP

PCT_DBSNP_INDELS

The fraction of passing indels in dbSNP PCT_DBSNP_INDELS

PCT_EXC_BASEQ

The fraction of aligned bases that were filtered out because they were of low base quality (default is < 20). PCT_EXC_BASEQ

PCT_EXC_CAPPED

The fraction of aligned bases that were filtered out because they would have raised coverage above the capped value (default cap = 250x). PCT_EXC_CAPPED

PCT_EXC_DUPE

The fraction of aligned bases that were filtered out because they were in reads marked as duplicates. PCT_EXC_DUPE

PCT_EXC_OVERLAP

The fraction of aligned bases that were filtered out because they were the second observation from an insert with overlapping reads. PCT_EXC_OVERLAP

PCT_EXC_TOTAL

The total fraction of aligned bases excluded due to all filters. PCT_EXC_TOTAL

PCT_EXC_UNPAIRED

The fraction of aligned bases that were filtered out because they were in reads without a mapped mate pair. PCT_EXC_UNPAIRED

PCT_GQ0_VARIANTS

The percentage of variants in a particular sample that have a GQ score of 0. PCT_GQ0_VARIANTS

PCT_PF_READS_ALIGNED

The percentage of PF reads that aligned to the reference sequence. PF_READS_ALIGNED / PF_READS PCT_PF_READS_ALIGNED

PCT_PF_READS_IMPROPER_PAIRS

The fraction of (primary) reads that are not “properly” aligned in pairs (as per SAM flag 0x2). PF_READS_IMPROPER_PAIRS / PF_READS_ALIGNED PCT_PF_READS_IMPROPER_PAIRS

PCT_READS_ALIGNED_IN_PAIRS

The fraction of reads whose mate pair was also aligned to the reference. READS_ALIGNED_IN_PAIRS / PF_READS_ALIGNED PCT_READS_ALIGNED_IN_PAIRS

PF_ALIGNED_BASES

The total number of aligned bases, in all mapped PF reads, that are aligned to the reference sequence. PF_ALIGNED_BASES

PF_HQ_ALIGNED_BASES

The number of bases aligned to the reference sequence in reads that were mapped at high quality. Will usually approximate PF_HQ_ALIGNED_READS * READ_LENGTH but may differ when either mixed read lengths are present or many reads are aligned with gaps. PF_HQ_ALIGNED_BASES

PF_HQ_ALIGNED_Q20_BASES

The subset of PF_HQ_ALIGNED_BASES where the base call quality was Q20 or higher. PF_HQ_ALIGNED_Q20_BASES

PF_HQ_ALIGNED_READS

The number of PF reads that were aligned to the reference sequence with a mapping quality of Q20 or higher signifying that the aligner estimates a 1/100 (or smaller) chance that the alignment is wrong. PF_HQ_ALIGNED_READS

PF_HQ_ERROR_RATE

The fraction of bases that mismatch the reference in PF HQ aligned reads. PF_HQ_ERROR_RATE

PF_INDEL_RATE

The number of insertion and deletion events per 100 aligned bases. Uses the number of events as the numerator, not the number of inserted or deleted bases. PF_INDEL_RATE

PF_MISMATCH_RATE

The rate of bases mismatching the reference for all bases aligned to the reference sequence. PF_MISMATCH_RATE

PF_READS

The number of PF reads where PF is defined as passing Illumina’s filter. PF_READS

PF_READS_ALIGNED

The number of PF reads that were aligned to the reference sequence. This includes reads that aligned with low quality (i.e. their alignments are ambiguous). PF_READS_ALIGNED

PF_READS_IMPROPER_PAIRS

The number of (primary) aligned reads that are not** “properly” aligned in pairs (as per SAM flag 0x2).** PF_READS_IMPROPER_PAIRS

READS_ALIGNED_IN_PAIRS

The number of aligned reads whose mate pair was also aligned to the reference. READS_ALIGNED_IN_PAIRS

READ_PAIRS

The total number of read pairs that were examined in the entire distribution. READ_PAIRS

SD_COVERAGE

The standard deviation of coverage of the genome after all filters are applied. SD_COVERAGE

SNP_REFERENCE_BIAS

The rate at which reference bases are observed at ref/alt heterozygous SNP sites. SNP_REFERENCE_BIAS

STANDARD_DEVIATION

Standard deviation of insert sizes over the “core” of the distribution. STANDARD_DEVIATION

STRAND_BALANCE

The number of PF reads aligned to the positive strand of the genome divided by the number of PF reads aligned to the genome. STRAND_BALANCE

TOTAL_COMPLEX_INDELS

The number of passing complex indel calls that were examined TOTAL_COMPLEX_INDELS

TOTAL_GQ0_VARIANTS

The total number of variants in a particular sample that have a GQ score of 0. TOTAL_GQ0_VARIANTS

TOTAL_HET_DEPTH

total number of reads (from AD field) for passing bi-allelic SNP hets for this sample TOTAL_HET_DEPTH

TOTAL_MULTIALLELIC_SNPS

The number of passing multi-allelic SNP calls that were examined TOTAL_MULTIALLELIC_SNPS

LS0tCnRpdGxlOiAiY2J0dGMgc2FsaXZhIGRhdGEgcXVhbGl0eSIKb3V0cHV0OiAgIAogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiB0cnVlCi0tLQoKIyMga2V5IG1ldHJpY3MKfCBUT1RBTF9SRUFEUyAgICAgICAgICAgICAgIHwgRlJFRU1JWCAoY29udGFtaW5hdGlvbikgfCAKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAKfCAhW10ocGxvdC9UT1RBTF9SRUFEUy5wbmcpIHwgIVtdKHBsb3QvRlJFRU1JWC5wbmcpICAgfCAKCnwgTUVBTl9DT1ZFUkFHRSAgICAgICAgICAgICAgIHwgTUVBTl9JTlNFUlRfU0laRSAgICAgICAgICAgICAgIHwgCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgCnwgIVtdKHBsb3QvTUVBTl9DT1ZFUkFHRS5wbmcpIHwgIVtdKHBsb3QvTUVBTl9JTlNFUlRfU0laRS5wbmcpIHwgCgp8IFRPVEFMX1NOUFMgICAgICAgICAgICAgICB8IFRPVEFMX0lOREVMUyAgICAgICAgICAgICAgIHwgCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAKfCAhW10ocGxvdC9UT1RBTF9TTlBTLnBuZykgfCAhW10ocGxvdC9UT1RBTF9JTkRFTFMucG5nKSB8IAoKCiMjIG1haW4gZGlmZiBtZXRyaWNzCi0gQWxsIHJlYWRzIGFuZCBkZXB0aCByZWxhdGVkIG1ldHJpY3M6CiAgICAtIGxvd2VyIGluIHNhbGl2ZSwgZHVlIHRvIGZld2VyIHJlYWRzCi0gYE1PREVfSU5TRVJUX1NJWkVgCiAgICAtIFRoZSBNT0RFIGluc2VydCBzaXplIG9mIGFsbCBwYWlyZWQgZW5kIHJlYWRzIHdoZXJlIGJvdGggZW5kcyBtYXBwZWQgdG8gdGhlIHNhbWUgY2hyb21vc29tZQogICAgLSBsb3dlciBpbiBzYWxpdmU7IHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBpbnNlcnQgc2l6ZSBkaXN0cmlidXRpb24KLSBgUENUX0VYQ19NQVBRYAogICAgLSBUaGUgZnJhY3Rpb24gb2YgYWxpZ25lZCBiYXNlcyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0IGJlY2F1c2UgdGhleSB3ZXJlIGluIHJlYWRzIHdpdGggbG93IG1hcHBpbmcgcXVhbGl0eQogICAgLSBoaWdoZXIgaW4gc2FsaXZlOyBtYXBwaW5nIHF1YWxpdHkgaXMgZ2VuZXJuYWxseSB3b3JzZQotIGBOT1ZFTF9USVRWYAogICAgLSBUaGUgVHJhbnNpdGlvbi9UcmFuc3ZlcnNpb24gcmF0aW8gb2YgdGhlIHBhc3NpbmcgYmktYWxsZWxpYyBTTlAgY2FsbHMgbWFkZSBhdCBub24tZGJTTlAgc2l0ZXMKICAgIC0gaGlnaGVyIEZQIGZvciBub3ZlbCB2YXJpYW50LCBuZWVkIGEgbW9yZSBzdHJpbmdlbnQgdHJhbmNoZSBzZW5zaXRpdml0eSB2YWx1ZS4gYERCU05QX1RJVFZgIGxvb2tzIG9rCgoKfCBNT0RFX0lOU0VSVF9TSVpFICAgICAgICAgICAgICAgfCBQQ1RfRVhDX01BUFEgICAgICAgICAgICAgICB8IE5PVkVMX1RJVFYgICAgICAgICAgICAgICB8IAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgCnwgIVtdKHBsb3QvTU9ERV9JTlNFUlRfU0laRS5wbmcpIHwgIVtdKHBsb3QvUENUX0VYQ19NQVBRLnBuZykgfCAhW10ocGxvdC9OT1ZFTF9USVRWLnBuZykgfCAKCgojIyBCQU0gaW4gSUdWCgojIyBvdGhlciBtZXRyaWNzCiMjIyBBVkdfRFAKKipBdmVyYWdlIHNlcXVlbmNpbmcgZGVwdGggYXQgdGhlIHNpdGVzIGluIHRoZSBWQ0YgZmlsZSoqCiFbQVZHX0RQXShwbG90L0FWR19EUC5wbmcpCgojIyMgREJTTlBfSU5TX0RFTF9SQVRJTwoqKlRoZSBJbnNlcnRpb24vRGVsZXRpb24gcmF0aW8gb2YgdGhlIGluZGVsIGNhbGxzIG1hZGUgYXQgZGJTTlAgc2l0ZXMqKgohW0RCU05QX0lOU19ERUxfUkFUSU9dKHBsb3QvREJTTlBfSU5TX0RFTF9SQVRJTy5wbmcpCgojIyMgREJTTlBfVElUVgoqKlRoZSBUcmFuc2l0aW9uL1RyYW5zdmVyc2lvbiByYXRpbyBvZiB0aGUgcGFzc2luZyBiaS1hbGxlbGljIFNOUCBjYWxscyBtYWRlIGF0IGRiU05QIHNpdGVzKioKIVtEQlNOUF9USVRWXShwbG90L0RCU05QX1RJVFYucG5nKQoKIyMjIEZSRUVMSzAKKipMb2ctbGlrZWxpaG9vZCBvZiB0aGUgc2VxdWVuY2UgcmVhZHMgZ2l2ZW4gbm8gY29udGFtaW5hdGlvbiB1bmRlciBzZXF1ZW5jZS1vbmx5IG1ldGhvZCoqCiFbRlJFRUxLMF0ocGxvdC9GUkVFTEswLnBuZykKCiMjIyBGUkVFTEsxCioqTWF4aW11bSBsb2ctbGlrZWxpaG9vZCBvZiB0aGUgc2VxdWVuY2UgcmVhZHMgZ2l2ZW4gZXN0aW1hdGVkIGNvbnRhbWluYXRpb24gdW5kZXIgc2VxdWVuY2Utb25seSBtZXRob2QqKgohW0ZSRUVMSzFdKHBsb3QvRlJFRUxLMS5wbmcpCgojIyMgSEVUX0hPTVZBUl9SQVRJTwoqKihjb3VudCBvZiBoZXRzKS8oY291bnQgb2YgaG9tb3p5Z291cyBub24tcmVmKSBmb3IgdGhpcyBzYW1wbGUqKgohW0hFVF9IT01WQVJfUkFUSU9dKHBsb3QvSEVUX0hPTVZBUl9SQVRJTy5wbmcpCgojIyMgSEVUX1NOUF9RCioqVGhlIFBocmVkIFNjYWxlZCBRIFNjb3JlIG9mIHRoZSB0aGVvcmV0aWNhbCBIRVQgU05QIHNlbnNpdGl2aXR5LioqCiFbSEVUX1NOUF9RXShwbG90L0hFVF9TTlBfUS5wbmcpCgojIyMgSEVUX1NOUF9TRU5TSVRJVklUWQoqKlRoZSB0aGVvcmV0aWNhbCBIRVQgU05QIHNlbnNpdGl2aXR5LioqCiFbSEVUX1NOUF9TRU5TSVRJVklUWV0ocGxvdC9IRVRfU05QX1NFTlNJVElWSVRZLnBuZykKCiMjIyBNQURfQ09WRVJBR0UKKipUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBvZiBjb3ZlcmFnZSBvZiB0aGUgZ2Vub21lIGFmdGVyIGFsbCBmaWx0ZXJzIGFyZSBhcHBsaWVkLioqCiFbTUFEX0NPVkVSQUdFXShwbG90L01BRF9DT1ZFUkFHRS5wbmcpCgojIyMgTUFYX0lOU0VSVF9TSVpFCioqVGhlIG1heGltdW0gbWVhc3VyZSBpbnNlcnQgc2l6ZSBieSBhbGlnbm1lbnQuIFRoaXMgaXMgdXN1YWxseSB2ZXJ5IGhpZ2ggcmVwcmVzZW50aW5nIGVpdGhlciBhbiBhcnRpZmFjdCBvciBwb3NzaWJseSB0aGUgcHJlc2VuY2Ugb2YgYSBzdHJ1Y3R1cmFsIHJlLWFycmFuZ2VtZW50LioqCiFbTUFYX0lOU0VSVF9TSVpFXShwbG90L01BWF9JTlNFUlRfU0laRS5wbmcpCgojIyMgTUVBTl9SRUFEX0xFTkdUSAoqKlRoZSBtZWFuIHJlYWQgbGVuZ3RoIG9mIHRoZSBzZXQgb2YgcmVhZHMgZXhhbWluZWQuIFdoZW4gbG9va2luZyBhdCB0aGUgZGF0YSBmb3IgYSBzaW5nbGUgbGFuZSB3aXRoIGVxdWFsIGxlbmd0aCByZWFkcyB0aGlzIG51bWJlciBpcyBqdXN0IHRoZSByZWFkIGxlbmd0aC4gV2hlbiBsb29raW5nIGF0IGRhdGEgZm9yIG1lcmdlZCBsYW5lcyB3aXRoIGRpZmZlcmluZyByZWFkIGxlbmd0aHMgdGhpcyBpcyB0aGUgbWVhbiByZWFkIGxlbmd0aCBvZiBhbGwgcmVhZHMuKioKIVtNRUFOX1JFQURfTEVOR1RIXShwbG90L01FQU5fUkVBRF9MRU5HVEgucG5nKQoKIyMjIE1FRElBTl9BQlNPTFVURV9ERVZJQVRJT04KKipUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGlzIGVzc2VudGlhbGx5IG5vcm1hbCB0aGVuIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY2FuIGJlIGVzdGltYXRlZCBhcyB+MS40ODI2ICogTUFELioqCiFbTUVESUFOX0FCU09MVVRFX0RFVklBVElPTl0ocGxvdC9NRURJQU5fQUJTT0xVVEVfREVWSUFUSU9OLnBuZykKCiMjIyBNRURJQU5fQ09WRVJBR0UKKipUaGUgbWVkaWFuIGNvdmVyYWdlIGluIGJhc2VzIG9mIHRoZSBnZW5vbWUgdGVycml0b3J5LCBhZnRlciBhbGwgZmlsdGVycyBhcmUgYXBwbGllZC4qKgohW01FRElBTl9DT1ZFUkFHRV0ocGxvdC9NRURJQU5fQ09WRVJBR0UucG5nKQoKIyMjIE1FRElBTl9JTlNFUlRfU0laRQoqKlRoZSBNRURJQU4gaW5zZXJ0IHNpemUgb2YgYWxsIHBhaXJlZCBlbmQgcmVhZHMgd2hlcmUgYm90aCBlbmRzIG1hcHBlZCB0byB0aGUgc2FtZSBjaHJvbW9zb21lLioqCiFbTUVESUFOX0lOU0VSVF9TSVpFXShwbG90L01FRElBTl9JTlNFUlRfU0laRS5wbmcpCgojIyMgTUlOX0lOU0VSVF9TSVpFCioqVGhlIG1pbmltdW0gbWVhc3VyZWQgaW5zZXJ0IHNpemUuIFRoaXMgaXMgdXN1YWxseSAxIGFuZCBub3QgdmVyeSB1c2VmdWwgYXMgaXQgaXMgbGlrZWx5IGFydGlmYWN0dWFsLioqCiFbTUlOX0lOU0VSVF9TSVpFXShwbG90L01JTl9JTlNFUlRfU0laRS5wbmcpCgojIyMgTk9WRUxfSU5ERUxTCioqVGhlIG51bWJlciBvZiBwYXNzaW5nIGluZGVscyBjYWxsZWQgdGhhdCB3ZXJlIG5vdCBmb3VuZCBpbiBkYlNOUCoqCiFbTk9WRUxfSU5ERUxTXShwbG90L05PVkVMX0lOREVMUy5wbmcpCgojIyMgTk9WRUxfSU5TX0RFTF9SQVRJTwoqKlRoZSBJbnNlcnRpb24vRGVsZXRpb24gcmF0aW8gb2YgdGhlIGluZGVsIGNhbGxzIG1hZGUgYXQgbm9uLWRiU05QIHNpdGVzKioKIVtOT1ZFTF9JTlNfREVMX1JBVElPXShwbG90L05PVkVMX0lOU19ERUxfUkFUSU8ucG5nKQoKIyMjIE5PVkVMX1NOUFMKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgYmktYWxsZWxpYyBTTlBTIGNhbGxlZCB0aGF0IHdlcmUgbm90IGZvdW5kIGluIGRiU05QKioKIVtOT1ZFTF9TTlBTXShwbG90L05PVkVMX1NOUFMucG5nKQoKIyMjIE5VTV9JTl9EQl9TTlAKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgYmktYWxsZWxpYyBTTlBzIGZvdW5kIGluIGRiU05QKioKIVtOVU1fSU5fREJfU05QXShwbG90L05VTV9JTl9EQl9TTlAucG5nKQoKIyMjIE5VTV9JTl9EQl9TTlBfQ09NUExFWF9JTkRFTFMKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgY29tcGxleCBpbmRlbHMgZm91bmQgaW4gZGJTTlAqKgohW05VTV9JTl9EQl9TTlBfQ09NUExFWF9JTkRFTFNdKHBsb3QvTlVNX0lOX0RCX1NOUF9DT01QTEVYX0lOREVMUy5wbmcpCgojIyMgTlVNX0lOX0RCX1NOUF9JTkRFTFMKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgaW5kZWxzIGZvdW5kIGluIGRiU05QKioKIVtOVU1fSU5fREJfU05QX0lOREVMU10ocGxvdC9OVU1fSU5fREJfU05QX0lOREVMUy5wbmcpCgojIyMgTlVNX0lOX0RCX1NOUF9NVUxUSUFMTEVMSUMKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgbXVsdGktYWxsZWxpYyBTTlBzIGZvdW5kIGluIGRiU05QKioKIVtOVU1fSU5fREJfU05QX01VTFRJQUxMRUxJQ10ocGxvdC9OVU1fSU5fREJfU05QX01VTFRJQUxMRUxJQy5wbmcpCgojIyMgTlVNX1NJTkdMRVRPTlMKKipGb3Igc3VtbWFyeSBtZXRyaWNzLCB0aGUgbnVtYmVyIG9mIHZhcmlhbnRzIHRoYXQgYXBwZWFyIGluIG9ubHkgb25lIHNhbXBsZS4qKgohW05VTV9TSU5HTEVUT05TXShwbG90L05VTV9TSU5HTEVUT05TLnBuZykKCiMjIyBQQ1RfMTAwWAoqKlRoZSBmcmFjdGlvbiBvZiBiYXNlcyB0aGF0IGF0dGFpbmVkIGF0IGxlYXN0IDEwMFggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfMTAwWF0ocGxvdC9QQ1RfMTAwWC5wbmcpCgojIyMgUENUXzEwWAoqKlRoZSBmcmFjdGlvbiBvZiBiYXNlcyB0aGF0IGF0dGFpbmVkIGF0IGxlYXN0IDEwWCBzZXF1ZW5jZSBjb3ZlcmFnZSBpbiBwb3N0LWZpbHRlcmluZyBiYXNlcy4qKgohW1BDVF8xMFhdKHBsb3QvUENUXzEwWC5wbmcpCgojIyMgUENUXzE1WAoqKlRoZSBmcmFjdGlvbiBvZiBiYXNlcyB0aGF0IGF0dGFpbmVkIGF0IGxlYXN0IDE1WCBzZXF1ZW5jZSBjb3ZlcmFnZSBpbiBwb3N0LWZpbHRlcmluZyBiYXNlcy4qKgohW1BDVF8xNVhdKHBsb3QvUENUXzE1WC5wbmcpCgojIyMgUENUXzFYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgMVggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfMVhdKHBsb3QvUENUXzFYLnBuZykKCiMjIyBQQ1RfMjBYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgMjBYIHNlcXVlbmNlIGNvdmVyYWdlIGluIHBvc3QtZmlsdGVyaW5nIGJhc2VzLioqCiFbUENUXzIwWF0ocGxvdC9QQ1RfMjBYLnBuZykKCiMjIyBQQ1RfMjVYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgMjVYIHNlcXVlbmNlIGNvdmVyYWdlIGluIHBvc3QtZmlsdGVyaW5nIGJhc2VzLioqCiFbUENUXzI1WF0ocGxvdC9QQ1RfMjVYLnBuZykKCiMjIyBQQ1RfMzBYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgMzBYIHNlcXVlbmNlIGNvdmVyYWdlIGluIHBvc3QtZmlsdGVyaW5nIGJhc2VzLioqCiFbUENUXzMwWF0ocGxvdC9QQ1RfMzBYLnBuZykKCiMjIyBQQ1RfNDBYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgNDBYIHNlcXVlbmNlIGNvdmVyYWdlIGluIHBvc3QtZmlsdGVyaW5nIGJhc2VzLioqCiFbUENUXzQwWF0ocGxvdC9QQ1RfNDBYLnBuZykKCiMjIyBQQ1RfNTBYCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgYXR0YWluZWQgYXQgbGVhc3QgNTBYIHNlcXVlbmNlIGNvdmVyYWdlIGluIHBvc3QtZmlsdGVyaW5nIGJhc2VzLioqCiFbUENUXzUwWF0ocGxvdC9QQ1RfNTBYLnBuZykKCiMjIyBQQ1RfNVgKKipUaGUgZnJhY3Rpb24gb2YgYmFzZXMgdGhhdCBhdHRhaW5lZCBhdCBsZWFzdCA1WCBzZXF1ZW5jZSBjb3ZlcmFnZSBpbiBwb3N0LWZpbHRlcmluZyBiYXNlcy4qKgohW1BDVF81WF0ocGxvdC9QQ1RfNVgucG5nKQoKIyMjIFBDVF82MFgKKipUaGUgZnJhY3Rpb24gb2YgYmFzZXMgdGhhdCBhdHRhaW5lZCBhdCBsZWFzdCA2MFggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfNjBYXShwbG90L1BDVF82MFgucG5nKQoKIyMjIFBDVF83MFgKKipUaGUgZnJhY3Rpb24gb2YgYmFzZXMgdGhhdCBhdHRhaW5lZCBhdCBsZWFzdCA3MFggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfNzBYXShwbG90L1BDVF83MFgucG5nKQoKIyMjIFBDVF84MFgKKipUaGUgZnJhY3Rpb24gb2YgYmFzZXMgdGhhdCBhdHRhaW5lZCBhdCBsZWFzdCA4MFggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfODBYXShwbG90L1BDVF84MFgucG5nKQoKIyMjIFBDVF85MFgKKipUaGUgZnJhY3Rpb24gb2YgYmFzZXMgdGhhdCBhdHRhaW5lZCBhdCBsZWFzdCA5MFggc2VxdWVuY2UgY292ZXJhZ2UgaW4gcG9zdC1maWx0ZXJpbmcgYmFzZXMuKioKIVtQQ1RfOTBYXShwbG90L1BDVF85MFgucG5nKQoKIyMjIFBDVF9BREFQVEVSCioqVGhlIGZyYWN0aW9uIG9mIFBGIHJlYWRzIHRoYXQgYXJlIHVuYWxpZ25lZCBhbmQgbWF0Y2ggdG8gYSBrbm93biBhZGFwdGVyIHNlcXVlbmNlKioKIVtQQ1RfQURBUFRFUl0ocGxvdC9QQ1RfQURBUFRFUi5wbmcpCgojIyMgUENUX0NISU1FUkFTCioqVGhlIGZyYWN0aW9uIG9mIHJlYWRzIHRoYXQgbWFwIG91dHNpZGUgb2YgYSBtYXhpbXVtIGluc2VydCBzaXplICh1c3VhbGx5IDEwMGtiKSBvciB0aGF0IGhhdmUgdGhlIHR3byBlbmRzIG1hcHBpbmcgdG8gZGlmZmVyZW50IGNocm9tb3NvbWVzLioqCiFbUENUX0NISU1FUkFTXShwbG90L1BDVF9DSElNRVJBUy5wbmcpCgojIyMgUENUX0RCU05QCioqVGhlIGZyYWN0aW9uIG9mIHBhc3NpbmcgYmktYWxsZWxpYyBTTlBzIGluIGRiU05QKioKIVtQQ1RfREJTTlBdKHBsb3QvUENUX0RCU05QLnBuZykKCiMjIyBQQ1RfREJTTlBfSU5ERUxTCioqVGhlIGZyYWN0aW9uIG9mIHBhc3NpbmcgaW5kZWxzIGluIGRiU05QKioKIVtQQ1RfREJTTlBfSU5ERUxTXShwbG90L1BDVF9EQlNOUF9JTkRFTFMucG5nKQoKIyMjIFBDVF9FWENfQkFTRVEKKipUaGUgZnJhY3Rpb24gb2YgYWxpZ25lZCBiYXNlcyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0IGJlY2F1c2UgdGhleSB3ZXJlIG9mIGxvdyBiYXNlIHF1YWxpdHkgKGRlZmF1bHQgaXMgPCAyMCkuKioKIVtQQ1RfRVhDX0JBU0VRXShwbG90L1BDVF9FWENfQkFTRVEucG5nKQoKIyMjIFBDVF9FWENfQ0FQUEVECioqVGhlIGZyYWN0aW9uIG9mIGFsaWduZWQgYmFzZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIG91dCBiZWNhdXNlIHRoZXkgd291bGQgaGF2ZSByYWlzZWQgY292ZXJhZ2UgYWJvdmUgdGhlIGNhcHBlZCB2YWx1ZSAoZGVmYXVsdCBjYXAgPSAyNTB4KS4qKgohW1BDVF9FWENfQ0FQUEVEXShwbG90L1BDVF9FWENfQ0FQUEVELnBuZykKCiMjIyBQQ1RfRVhDX0RVUEUKKipUaGUgZnJhY3Rpb24gb2YgYWxpZ25lZCBiYXNlcyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0IGJlY2F1c2UgdGhleSB3ZXJlIGluIHJlYWRzIG1hcmtlZCBhcyBkdXBsaWNhdGVzLioqCiFbUENUX0VYQ19EVVBFXShwbG90L1BDVF9FWENfRFVQRS5wbmcpCgojIyMgUENUX0VYQ19PVkVSTEFQCioqVGhlIGZyYWN0aW9uIG9mIGFsaWduZWQgYmFzZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIG91dCBiZWNhdXNlIHRoZXkgd2VyZSB0aGUgc2Vjb25kIG9ic2VydmF0aW9uIGZyb20gYW4gaW5zZXJ0IHdpdGggb3ZlcmxhcHBpbmcgcmVhZHMuKioKIVtQQ1RfRVhDX09WRVJMQVBdKHBsb3QvUENUX0VYQ19PVkVSTEFQLnBuZykKCiMjIyBQQ1RfRVhDX1RPVEFMCioqVGhlIHRvdGFsIGZyYWN0aW9uIG9mIGFsaWduZWQgYmFzZXMgZXhjbHVkZWQgZHVlIHRvIGFsbCBmaWx0ZXJzLioqCiFbUENUX0VYQ19UT1RBTF0ocGxvdC9QQ1RfRVhDX1RPVEFMLnBuZykKCiMjIyBQQ1RfRVhDX1VOUEFJUkVECioqVGhlIGZyYWN0aW9uIG9mIGFsaWduZWQgYmFzZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIG91dCBiZWNhdXNlIHRoZXkgd2VyZSBpbiByZWFkcyB3aXRob3V0IGEgbWFwcGVkIG1hdGUgcGFpci4qKgohW1BDVF9FWENfVU5QQUlSRURdKHBsb3QvUENUX0VYQ19VTlBBSVJFRC5wbmcpCgojIyMgUENUX0dRMF9WQVJJQU5UUwoqKlRoZSBwZXJjZW50YWdlIG9mIHZhcmlhbnRzIGluIGEgcGFydGljdWxhciBzYW1wbGUgdGhhdCBoYXZlIGEgR1Egc2NvcmUgb2YgMC4qKgohW1BDVF9HUTBfVkFSSUFOVFNdKHBsb3QvUENUX0dRMF9WQVJJQU5UUy5wbmcpCgojIyMgUENUX1BGX1JFQURTX0FMSUdORUQKKipUaGUgcGVyY2VudGFnZSBvZiBQRiByZWFkcyB0aGF0IGFsaWduZWQgdG8gdGhlIHJlZmVyZW5jZSBzZXF1ZW5jZS4gUEZfUkVBRFNfQUxJR05FRCAvIFBGX1JFQURTKioKIVtQQ1RfUEZfUkVBRFNfQUxJR05FRF0ocGxvdC9QQ1RfUEZfUkVBRFNfQUxJR05FRC5wbmcpCgojIyMgUENUX1BGX1JFQURTX0lNUFJPUEVSX1BBSVJTCioqVGhlIGZyYWN0aW9uIG9mIChwcmltYXJ5KSByZWFkcyB0aGF0IGFyZSAqbm90KiAicHJvcGVybHkiIGFsaWduZWQgaW4gcGFpcnMgKGFzIHBlciBTQU0gZmxhZyAweDIpLiBQRl9SRUFEU19JTVBST1BFUl9QQUlSUyAvIFBGX1JFQURTX0FMSUdORUQqKgohW1BDVF9QRl9SRUFEU19JTVBST1BFUl9QQUlSU10ocGxvdC9QQ1RfUEZfUkVBRFNfSU1QUk9QRVJfUEFJUlMucG5nKQoKIyMjIFBDVF9SRUFEU19BTElHTkVEX0lOX1BBSVJTCioqVGhlIGZyYWN0aW9uIG9mIHJlYWRzIHdob3NlIG1hdGUgcGFpciB3YXMgYWxzbyBhbGlnbmVkIHRvIHRoZSByZWZlcmVuY2UuIFJFQURTX0FMSUdORURfSU5fUEFJUlMgLyBQRl9SRUFEU19BTElHTkVEKioKIVtQQ1RfUkVBRFNfQUxJR05FRF9JTl9QQUlSU10ocGxvdC9QQ1RfUkVBRFNfQUxJR05FRF9JTl9QQUlSUy5wbmcpCgojIyMgUEZfQUxJR05FRF9CQVNFUwoqKlRoZSB0b3RhbCBudW1iZXIgb2YgYWxpZ25lZCBiYXNlcywgaW4gYWxsIG1hcHBlZCBQRiByZWFkcywgdGhhdCBhcmUgYWxpZ25lZCB0byB0aGUgcmVmZXJlbmNlIHNlcXVlbmNlLioqCiFbUEZfQUxJR05FRF9CQVNFU10ocGxvdC9QRl9BTElHTkVEX0JBU0VTLnBuZykKCiMjIyBQRl9IUV9BTElHTkVEX0JBU0VTCioqVGhlIG51bWJlciBvZiBiYXNlcyBhbGlnbmVkIHRvIHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UgaW4gcmVhZHMgdGhhdCB3ZXJlIG1hcHBlZCBhdCBoaWdoIHF1YWxpdHkuIFdpbGwgdXN1YWxseSBhcHByb3hpbWF0ZSBQRl9IUV9BTElHTkVEX1JFQURTICogUkVBRF9MRU5HVEggYnV0IG1heSBkaWZmZXIgd2hlbiBlaXRoZXIgbWl4ZWQgcmVhZCBsZW5ndGhzIGFyZSBwcmVzZW50IG9yIG1hbnkgcmVhZHMgYXJlIGFsaWduZWQgd2l0aCBnYXBzLioqCiFbUEZfSFFfQUxJR05FRF9CQVNFU10ocGxvdC9QRl9IUV9BTElHTkVEX0JBU0VTLnBuZykKCiMjIyBQRl9IUV9BTElHTkVEX1EyMF9CQVNFUwoqKlRoZSBzdWJzZXQgb2YgUEZfSFFfQUxJR05FRF9CQVNFUyB3aGVyZSB0aGUgYmFzZSBjYWxsIHF1YWxpdHkgd2FzIFEyMCBvciBoaWdoZXIuKioKIVtQRl9IUV9BTElHTkVEX1EyMF9CQVNFU10ocGxvdC9QRl9IUV9BTElHTkVEX1EyMF9CQVNFUy5wbmcpCgojIyMgUEZfSFFfQUxJR05FRF9SRUFEUwoqKlRoZSBudW1iZXIgb2YgUEYgcmVhZHMgdGhhdCB3ZXJlIGFsaWduZWQgdG8gdGhlIHJlZmVyZW5jZSBzZXF1ZW5jZSB3aXRoIGEgbWFwcGluZyBxdWFsaXR5IG9mIFEyMCBvciBoaWdoZXIgc2lnbmlmeWluZyB0aGF0IHRoZSBhbGlnbmVyIGVzdGltYXRlcyBhIDEvMTAwIChvciBzbWFsbGVyKSBjaGFuY2UgdGhhdCB0aGUgYWxpZ25tZW50IGlzIHdyb25nLioqCiFbUEZfSFFfQUxJR05FRF9SRUFEU10ocGxvdC9QRl9IUV9BTElHTkVEX1JFQURTLnBuZykKCiMjIyBQRl9IUV9FUlJPUl9SQVRFCioqVGhlIGZyYWN0aW9uIG9mIGJhc2VzIHRoYXQgbWlzbWF0Y2ggdGhlIHJlZmVyZW5jZSBpbiBQRiBIUSBhbGlnbmVkIHJlYWRzLioqCiFbUEZfSFFfRVJST1JfUkFURV0ocGxvdC9QRl9IUV9FUlJPUl9SQVRFLnBuZykKCiMjIyBQRl9JTkRFTF9SQVRFCioqVGhlIG51bWJlciBvZiBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIGV2ZW50cyBwZXIgMTAwIGFsaWduZWQgYmFzZXMuIFVzZXMgdGhlIG51bWJlciBvZiBldmVudHMgYXMgdGhlIG51bWVyYXRvciwgbm90IHRoZSBudW1iZXIgb2YgaW5zZXJ0ZWQgb3IgZGVsZXRlZCBiYXNlcy4qKgohW1BGX0lOREVMX1JBVEVdKHBsb3QvUEZfSU5ERUxfUkFURS5wbmcpCgojIyMgUEZfTUlTTUFUQ0hfUkFURQoqKlRoZSByYXRlIG9mIGJhc2VzIG1pc21hdGNoaW5nIHRoZSByZWZlcmVuY2UgZm9yIGFsbCBiYXNlcyBhbGlnbmVkIHRvIHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UuKioKIVtQRl9NSVNNQVRDSF9SQVRFXShwbG90L1BGX01JU01BVENIX1JBVEUucG5nKQoKIyMjIFBGX1JFQURTCioqVGhlIG51bWJlciBvZiBQRiByZWFkcyB3aGVyZSBQRiBpcyBkZWZpbmVkIGFzIHBhc3NpbmcgSWxsdW1pbmEncyBmaWx0ZXIuKioKIVtQRl9SRUFEU10ocGxvdC9QRl9SRUFEUy5wbmcpCgojIyMgUEZfUkVBRFNfQUxJR05FRAoqKlRoZSBudW1iZXIgb2YgUEYgcmVhZHMgdGhhdCB3ZXJlIGFsaWduZWQgdG8gdGhlIHJlZmVyZW5jZSBzZXF1ZW5jZS4gVGhpcyBpbmNsdWRlcyByZWFkcyB0aGF0IGFsaWduZWQgd2l0aCBsb3cgcXVhbGl0eSAoaS5lLiB0aGVpciBhbGlnbm1lbnRzIGFyZSBhbWJpZ3VvdXMpLioqCiFbUEZfUkVBRFNfQUxJR05FRF0ocGxvdC9QRl9SRUFEU19BTElHTkVELnBuZykKCiMjIyBQRl9SRUFEU19JTVBST1BFUl9QQUlSUwoqKlRoZSBudW1iZXIgb2YgKHByaW1hcnkpIGFsaWduZWQgcmVhZHMgdGhhdCBhcmUgKipub3QqKiAicHJvcGVybHkiIGFsaWduZWQgaW4gcGFpcnMgKGFzIHBlciBTQU0gZmxhZyAweDIpLioqCiFbUEZfUkVBRFNfSU1QUk9QRVJfUEFJUlNdKHBsb3QvUEZfUkVBRFNfSU1QUk9QRVJfUEFJUlMucG5nKQoKIyMjIFJFQURTX0FMSUdORURfSU5fUEFJUlMKKipUaGUgbnVtYmVyIG9mIGFsaWduZWQgcmVhZHMgd2hvc2UgbWF0ZSBwYWlyIHdhcyBhbHNvIGFsaWduZWQgdG8gdGhlIHJlZmVyZW5jZS4qKgohW1JFQURTX0FMSUdORURfSU5fUEFJUlNdKHBsb3QvUkVBRFNfQUxJR05FRF9JTl9QQUlSUy5wbmcpCgojIyMgUkVBRF9QQUlSUwoqKlRoZSB0b3RhbCBudW1iZXIgb2YgcmVhZCBwYWlycyB0aGF0IHdlcmUgZXhhbWluZWQgaW4gdGhlIGVudGlyZSBkaXN0cmlidXRpb24uKioKIVtSRUFEX1BBSVJTXShwbG90L1JFQURfUEFJUlMucG5nKQoKIyMjIFNEX0NPVkVSQUdFCioqVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBjb3ZlcmFnZSBvZiB0aGUgZ2Vub21lIGFmdGVyIGFsbCBmaWx0ZXJzIGFyZSBhcHBsaWVkLioqCiFbU0RfQ09WRVJBR0VdKHBsb3QvU0RfQ09WRVJBR0UucG5nKQoKIyMjIFNOUF9SRUZFUkVOQ0VfQklBUwoqKlRoZSByYXRlIGF0IHdoaWNoIHJlZmVyZW5jZSBiYXNlcyBhcmUgb2JzZXJ2ZWQgYXQgcmVmL2FsdCBoZXRlcm96eWdvdXMgU05QIHNpdGVzLioqCiFbU05QX1JFRkVSRU5DRV9CSUFTXShwbG90L1NOUF9SRUZFUkVOQ0VfQklBUy5wbmcpCgojIyMgU1RBTkRBUkRfREVWSUFUSU9OCioqU3RhbmRhcmQgZGV2aWF0aW9uIG9mIGluc2VydCBzaXplcyBvdmVyIHRoZSAiY29yZSIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4qKgohW1NUQU5EQVJEX0RFVklBVElPTl0ocGxvdC9TVEFOREFSRF9ERVZJQVRJT04ucG5nKQoKIyMjIFNUUkFORF9CQUxBTkNFCioqVGhlIG51bWJlciBvZiBQRiByZWFkcyBhbGlnbmVkIHRvIHRoZSBwb3NpdGl2ZSBzdHJhbmQgb2YgdGhlIGdlbm9tZSBkaXZpZGVkIGJ5IHRoZSBudW1iZXIgb2YgUEYgcmVhZHMgYWxpZ25lZCB0byB0aGUgZ2Vub21lLioqCiFbU1RSQU5EX0JBTEFOQ0VdKHBsb3QvU1RSQU5EX0JBTEFOQ0UucG5nKQoKIyMjIFRPVEFMX0NPTVBMRVhfSU5ERUxTCioqVGhlIG51bWJlciBvZiBwYXNzaW5nIGNvbXBsZXggaW5kZWwgY2FsbHMgdGhhdCB3ZXJlIGV4YW1pbmVkKioKIVtUT1RBTF9DT01QTEVYX0lOREVMU10ocGxvdC9UT1RBTF9DT01QTEVYX0lOREVMUy5wbmcpCgojIyMgVE9UQUxfR1EwX1ZBUklBTlRTCioqVGhlIHRvdGFsIG51bWJlciBvZiB2YXJpYW50cyBpbiBhIHBhcnRpY3VsYXIgc2FtcGxlIHRoYXQgaGF2ZSBhIEdRIHNjb3JlIG9mIDAuKioKIVtUT1RBTF9HUTBfVkFSSUFOVFNdKHBsb3QvVE9UQUxfR1EwX1ZBUklBTlRTLnBuZykKCiMjIyBUT1RBTF9IRVRfREVQVEgKKip0b3RhbCBudW1iZXIgb2YgcmVhZHMgKGZyb20gQUQgZmllbGQpIGZvciBwYXNzaW5nIGJpLWFsbGVsaWMgU05QIGhldHMgZm9yIHRoaXMgc2FtcGxlKioKIVtUT1RBTF9IRVRfREVQVEhdKHBsb3QvVE9UQUxfSEVUX0RFUFRILnBuZykKCgojIyMgVE9UQUxfTVVMVElBTExFTElDX1NOUFMKKipUaGUgbnVtYmVyIG9mIHBhc3NpbmcgbXVsdGktYWxsZWxpYyBTTlAgY2FsbHMgdGhhdCB3ZXJlIGV4YW1pbmVkKioKIVtUT1RBTF9NVUxUSUFMTEVMSUNfU05QU10ocGxvdC9UT1RBTF9NVUxUSUFMTEVMSUNfU05QUy5wbmcpCg==